// Datum                                Naam programmeur
//   Beschrijving                         Storynummer
//======================================================
// 19/11/2013                           Leys Thomas (c1026794)
//   Creatie MaakETicketModel             UC 11.1 S01
// 20/11/2013                           Leys Thomas (c1026794)
//   Fout in SQL opgelost                 UC 11.1 S01
// 23/11/2013                           Leys Thomas (c1026794)
//   SQL aangepast: extra velden ophalen  UC 11.1 S03

package core.logic.dataAccess;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import core.logic.services.utilServices.ConnectionService;
import core.models.domainModel.ETicket;
import core.models.domainModel.Luchthaven;
import core.models.domainModel.Zitplaats;

public class ETicketDAO {
	public static ETicket getETicket(int passagierId) {
		int ticketNummer = 0;
		String paspoortNummer = "";
		String voornaam = "";
		String achternaam = "";
		String geboortedatum = "";
		int vluchtId = 0;
		String vluchtNummer = "";
		String vertrekLuchthavenNaam = "";
		String vertrekLuchthavenCode = "";
		String vertrekTijdstip = "";
		String aankomstLuchthavenNaam = "";
		String aankomstLuchthavenCode = "";
		String aankomstTijdstip = "";
		String zitplaatsNaam = "";
		String zitplaatsType = "";
		Luchthaven vertrekLuchthaven = null;
		Luchthaven aankomstLuchthaven = null;
		Zitplaats zitplaats = null;
		ETicket ticket = null;
		
		String sql = "SELECT pa.PassagierId AS Ticketnummer, "
				+           "pa.PaspoortNummer AS Paspoortnummer, " 
		        +           "pe.Naam AS Achternaam, "
		        +           "pe.Voornaam AS Voornaam, "
		        +           "pe.Geboortedatum AS Geboortedatum, "
		        +           "vl.VluchtId AS VluchtId, "
				+           "vl.VluchtNr AS VluchtNummer, "
				+           "lu1.LuchthavenNaam AS VertrekLuchthavenNaam, "
		        +           "lu1.LuchthavenCode AS VertrekLuchthavenCode, "
		        +           "lu2.LuchthavenNaam AS AankomstLuchthavenNaam, "
				+           "lu2.LuchthavenCode AS AankomstLuchthavenCode, "
				+           "vl.VertrekTijd AS VertrekTijd, "
				+           "vl.AankomstTijd AS AankomstTijd, "
				+           "zi.ZitplaatsNaam AS ZitplaatsNaam, "
				+           "pa.BookingType AS ZitplaatsType "
				+ "FROM Passagier AS pa "
				+    "INNER JOIN Persoon AS pe ON (pa.PersoonId = pe.PersoonId) "
				+    "INNER JOIN Vlucht AS vl ON (pa.VluchtId = vl.VluchtId) "
				+    "LEFT OUTER JOIN Zitplaats AS zi ON (pa.ZitplaatsId = zi.ZitplaatsId) "
				+    "INNER JOIN Luchthaven AS lu1 ON (vl.VertrekLuchthavenId = lu1.LuchthavenId) "
				+    "INNER JOIN Luchthaven AS lu2 ON (vl.AankomstLuchthavenId = lu2.LuchthavenId) "
				+ "WHERE PassagierId = ?";
	
		try {
			PreparedStatement statement = ConnectionService.getConnection().prepareStatement(sql);
			statement.setInt(1, passagierId);
			
			ResultSet rs = statement.executeQuery();
			
			while(rs.next()) {
				ticketNummer = rs.getInt("Ticketnummer");
				paspoortNummer = rs.getString("PaspoortNummer");
				voornaam = rs.getString("Voornaam");
				achternaam = rs.getString("Achternaam");
				geboortedatum = rs.getString("Geboortedatum");
				vluchtId = rs.getInt("VluchtId");
				vluchtNummer = rs.getString("VluchtNummer");
				vertrekLuchthavenNaam = rs.getString("VertrekLuchthavenNaam");
				vertrekLuchthavenCode = rs.getString("VertrekLuchthavenCode");
				aankomstLuchthavenNaam = rs.getString("AankomstLuchthavenNaam");
				aankomstLuchthavenCode = rs.getString("AankomstLuchthavenCode");
				vertrekTijdstip = rs.getString("VertrekTijd");
				aankomstTijdstip = rs.getString("AankomstTijd");
				zitplaatsNaam = rs.getString("ZitplaatsNaam");
				zitplaatsType = rs.getString("ZitplaatsType");
				
				vertrekLuchthaven = new Luchthaven(
						0, 
						vertrekLuchthavenCode,
						vertrekLuchthavenNaam,
						null);
				
				aankomstLuchthaven = new Luchthaven(
						0, 
						aankomstLuchthavenCode,
						aankomstLuchthavenNaam,
						null);
				
				zitplaats = new Zitplaats(
						0, 
						zitplaatsNaam, 
						zitplaatsType, 
						0);
				
				ticket = new ETicket(
						ticketNummer,
						paspoortNummer,
						voornaam,
						achternaam,
						geboortedatum,
						vluchtId,
						vluchtNummer,
						vertrekLuchthaven,
						vertrekTijdstip, 
						aankomstLuchthaven, 
						aankomstTijdstip, 
						zitplaats);
			}
		} catch(SQLException ex) {
			ex.printStackTrace();
		}
		
		return ticket;
	}
}